﻿<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title>Ajouter un module (projet) à une solution basée sur la plateforme Nentang.wpf</title>
    <link rel="stylesheet" type="text/css" href="../css/bootstrap.min.css">
    <link rel="stylesheet" type="text/css" href="../css/styleDark.css">
    <link rel="stylesheet" type="text/css" href="~MVAX/bootstrap.min.css">
    <link rel="stylesheet" type="text/css" href="~MVAX/theme">
    <script type="text/javascript" src="~MVAX/dataJSON.json"></script>
</head>
<body>
    <h3>Ajouter un module (projet) à une solution basée sur la plateforme Nentang.wpf</h3>
    <em style="font-size:12px; color:grey">Tutoriel de <b>Marc Plessis - Kopigi</b> twitter : @mplessis</em><br><br>
    <p>Bonjour, bienvenue dans ce tutoriel vous permettant d'ajouter un module à une solution basée sur la plateforme nentang.wpf que vous avez créée précédemment</p>

    <h4>I. Ajout d'un module à votre solution</h4>
    <p>
        Votre solution est maintenant créé, plusieurs projets existent maintenant, ainsi qu'un dossier de solution <b>Modules</b>.<br />
        Nous allons maintenant ajouter un module pour notre application. Pour cela sélectionnez le dossier <i>Modules</i> et reprennez l'étape I. en choisissant <b>EmptyModule</b> dans les templates de projet de la catégorie <i>Nentang.wpf</i>, nommez le <b>MyModule</b>.
    </p>
	<p>
        ou cliquez ici : <a class="btn" onclick="window.external.ExecuteCommand('AddNewProject', '', '')">
            Créer un nouveau projet
        </a>
    </p>
	<h4>II. Restauration des packages NuGet</h4>
	<p>Comme pour la solution il faut que Visual Studio ré-installe les packages NuGet pour le module ajouté, votre solution étant correctement configurée à cette étape, cela est simple</p>
	<p>
		Ouvrez la console du gestionnaire de package
	</p>
	<p class="action">Affichage <span>&#9658;</span> Autres fenêtres <span>&#9658;</span> Console du Gestionnaire de package</p>
	<p>
		Cette fenêtre peut vous proposer, éventuellement, dans un bandeau jaune, un bouton <b>Restaurer</b> qui va télécharger les packages manquants utilisés par le module
	</p>
    <p>
        Dans la console du gestionnaire de package tapez la commande suivante
    </p>
    <div class="code">
        <code>
            update-package -reinstall MyModule
        </code>
        <a class="btn" onclick="window.external.ExecuteCommand('CopyText', dataNentang.UpdatePackages, '')">Copier</a>
    </div>
    <p>Visual Studio va ré-installer les packages utilisés dans le projet. Une fois cette étape réalisée, relancez Visual studio afin qu'il recharge correctement tous les projets.</p>
    <p>Lancer une compilation de la solution</p>
    <p><b>vous devez toujours compiler la solution entiére avant de l'éxécuter afin que votre projet de module soit compilé correctement pour l'éxécution, sinon votre module ne sera pas à jour lors de vos tests</b></p>
    <p>
        <a class="btn" onclick="window.external.ExecuteCommand('Rebuild', '', '')">
            Compiler la solution
        </a>
    </p>
    <p>Exécutez maintenant la solution</p>
    <p>
        <a class="btn" onclick="window.external.ExecuteCommand('Start', '', '')">
            Exécuter la solution
        </a>
    </p>
    <p>L'application se lance et créée la base de données la premiére fois. L'écran de connexion apparait, les logins sont admin/admin</p>
    <p>Vous voila maintenant prêt à ajouter votre premier module dans votre application Nentang.wpf</p>
	<h4>III. Modification des fichiers du module et de la solution pour l'identification</h4>
	<h5>III. 1. Valeur d'énumération pour le module</h5>
	<p>
		Afin de pouvoir identifier facilement votre module au sein de l'application, des droits et paramétres, vous devez ajouter une valeur d'énumération pour ce module. Pour cela ouvrez le fichier
	</p>
	<p class="action"><i>Commons</i> <span>&#9658;</span> <i>Interfaces</i> <span>&#9658;</span> <i>Enums</i> <span>&#9658;</span> <i>TypeModulesEnum.cs</i></p>
    <p>Ensuite ajouter la valeur d'énumération suivante</p>
    <div class="code">
        <code>
            MyModule = 1
        </code>
        <a class="btn" onclick="window.external.ExecuteCommand('CopyText', dataNentang.EnumModule, '')">Copier</a>
    </div>
	
	<p>Vous devez également modifier les fichiers suivants (présents dans le module) pour insérer la valeur d'énumération que vous venez de choisir :</p>
	<ul>
		<li><i>Rights.cs</i> : Ici vous pourrez définir les droits dont vous avez besoin dans votre module.</li>
		<li><i>OpenObjectContract.cs</i> : Ici vous pourrez définir la façon dont un de vos objet s'ouvre dans votre module (depuis une notification ou une recherche dans l'hôte de l'application).</li>
		<li><i>AccueilContractViewModel.cs</i> : Ici vous définissez le ViewModel de votre UserControl répondant au contrat de plugin d'accueil.</li>
		<li><i>SearchContract.cs</i> : Ici vous pourrez définir la façon dont un pattern doit être recherché dans votre module.</li>
	</ul>
	
	<h5>III. 2. Identification du module</h5>
	<p>
	Votre module est également identifié par l'application par une série d'informations se trouvant dans le fichier <i>ViewModels</i> <span>&#9658;</span> <i>AccueilViewModel.cs</i> du module. Ces informations sont celles de l'attribut <i>Module</i>
	</p>
	<div class="code">
        <code>
            [Module("EmptyLocalized", 1, "da37644b-6249-43fe-9a02-2dd3df06c378", typeof(AccueilViewModel), TypeModulesEnum.Empty, "")]
        </code>
        <a class="btn" onclick="window.external.ExecuteCommand('CopyText', dataNentang.EnumModule, '')">Copier</a>
    </div>
	<ul>
		<li><i>EmptyLocalized</i> : est la clé d'internationalisation du titre du module, vous la trouverez dans le fichier <i>I18n</i> <span>&#9658;</span> <i>FR.xaml</i> où vous pourrez changer cette valeur.</li>
		<li><i>1</i> : défini la priorité d'affichage du module dans le menu.</li>
		<li><i>da37644b-6249-43fe-9a02-2dd3df06c378</i> : représentre un GUID (unique donc) permettant l'identification du module par l'hôte de l'application. Pour le premier module vous pouvez conserver cette valeur, elle devra être modifiée dans les modules éventuels que vous ajouteriez.</li>
		<li><i>typeof(AccueilViewModel)</i> : représente le type (typeof) de module.</li>
		<li><i>TypeModulesEnum.Empty</i> : indique à l'application la valeur d'énumération associée au module.</li>
		<li><i>""</i> : ici vous pouvez ajouter un nom de fonction à exécuter lors de l'ouverture du module par le menu.</li>
		<li>Une valeur booléenne vous permez également d'indiquer si votre module est visible ou non dans le menu, par défaut cette valeur est true.</li>
	</ul>
	
	<p>Vous devez également modifier les fichiers suivants (présents dans le module) pour insérer la valeur du GUID que vous venez de choisir :</p>
	<ul>
		<li><i>AccueilContractViewModel.cs</i> : Ici vous définissez le ViewModel de votre UserControl répondant au contrat de plugin d'accueil.</li>
		<li><i>SearchContract.cs</i> : Ici vous pourrez définir la façon dont un pattern doit être recherché dans votre module.</li>
	</ul>
	
	<p>Lorsque vous avez modifié les informations que vous souhaitiez pour le module, vous pouvez compiler la solution et l'éxécuter</p>
	<p><b>vous devez toujours compiler la solution entiére avant de l'éxécuter afin que votre projet de module soit compilé correctement pour l'éxécution, sinon votre module ne sera pas à jour lors de vos tests</b></p>
	<p>
        <a class="btn" onclick="window.external.ExecuteCommand('Rebuild', '', '')">
            Compiler la solution
        </a>
    </p>
	<p>
        <a class="btn" onclick="window.external.ExecuteCommand('Start', '', '')">
            Exécuter la solution
        </a>
    </p>
</body>
</html>